/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model.fabrica;

import br.uerj.bean.FeedsBean;
import br.uerj.bean.UsuarioBean;
import br.uerj.jms.banco.PublishBanco;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.jms.JMSException;
import javax.naming.NamingException;

/**
 *
 * @author Felipe Ribeiro
 */
public class FabricaDeConexaoBD {

    /**
     * Variáveis necessárias para estabelecer a conexão
     */
    private static final String usuario = "postgres";
    private static final String senha = "12345";
    private static final String url = "jdbc:postgresql://localhost:5432/meubancodedados";

    private FabricaDeConexaoBD() {

    }

    /**
     * Método que estabelece a conexão com o banco de dados PostgreSQL chamado
     * projeto
     *
     * @return conexão estabelecida
     */
    private static Connection abrir() throws Exception {

        Connection conn = null;
        try {
            conn = (Connection) DriverManager.getConnection(url, usuario, senha);
        } catch (Exception ex) {
            System.err.print(ex.getMessage());
            throw ex;
        }
        return conn;
    }

    /**
     * Método que executa a pesquisa no banco de dados e prepara o resultado
     *
     * @param conteudo
     * @throws NamingException
     * @throws JMSException
     * @throws Exception
     */
    public static List<FeedsBean> consultarPalavraChave(String conteudo) throws NamingException, JMSException, Exception {

        System.out.println("LOG DO BANCO DE DADOS: Efetuando uma consulta no Banco de Dados");

        String query = "select * from feeds where palavrachave like '%" + conteudo + "%'";

        Connection con = FabricaDeConexaoBD.abrir();

        Statement stmt = null;
        List<FeedsBean> lista = null;
        try {
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);

            FeedsBean b = null;
            lista = new ArrayList<FeedsBean>();
            while (rs.next()) {
                b = new FeedsBean();
                b.setId(rs.getInt("id"));
                b.setTitulo(rs.getString("titulo"));
                b.setPalavrachave(rs.getString("palavrachave"));
                b.setResumo(rs.getString("resumo"));
                b.setUrl(rs.getString("url"));
                b.setIdPublicador(rs.getInt("id_usuario_publicador"));
                lista.add(b);
            }
            PublishBanco.start(lista);

        } catch (SQLException e) {
            e.printStackTrace();
            System.err.print(e.getMessage());
        } finally {
            if (stmt != null) {
                stmt.close();
            }
            con.close();
        }
        System.out.println("LOG DO BANCO DE DADOS: Fim da Consulta...");
        return lista;
    }

    public static void inserirUsuario(UsuarioBean usuario) throws Exception {

        System.out.println("LOG DO BANCO DE DADOS: Inserindo usuario no Banco de Dados..");

        if (usuario == null) {
            throw new NullPointerException();
        }

        String query = String.format("insert into usuario(nome,senha,login) values ('%s','%s','%s')", usuario.getNome(), usuario.getSenha(), usuario.getLogin());
        Connection con = null;
        Statement stmt = null;

        try {
            con = FabricaDeConexaoBD.abrir();
            stmt = con.createStatement();
            stmt.execute(query);

        } catch (SQLException e) {
            e.printStackTrace();
            System.err.print(e.getMessage());
            throw e;
        } finally {
            if (stmt != null) {
                stmt.close();
            }
            con.close();
        }
        System.out.println("LOG DO BANCO DE DADOS: Inseriu Usuário no Banco de Dados com sucesso");
    }

}
